package com.heqiang.spring;

import cn.hutool.core.io.IoUtil;
import com.heqiang.spring.context.support.ClassXmlApplicationContext;
import com.heqiang.spring.core.io.Resource;
import com.heqiang.spring.core.io.XmlBeanDefinitionReader;
import com.heqiang.spring.core.io.loader.DefaultResourceLoader;
import com.heqiang.spring.factory.DefaultListableBeanFactory;
import com.heqiang.spring.service.TestService;
import com.heqiang.spring.service.common.MyBeanFactoryPostProcessor;
import com.heqiang.spring.service.common.MyBeanPostProcessor;

import java.io.InputStream;

/**
 * 学习链接
 * https://mp.weixin.qq.com/s/sv0H1NAuO3s90HC6QpjP5g
 */
public class TestMain {

    /**
     * 自己NEW一个bean工厂例子
     * @param args
     */
    public static void main(String[] args) {
        //初始化beanFactory
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        //读取配置文件与注册bean
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
        reader.loadBeanDefinitions("classpath:spring.xml");

        //BeanDefinition 加载完成 & Bean实例化之前，修改 BeanDefinition 的属性值
        MyBeanFactoryPostProcessor myBeanFactoryPostProcessor = new MyBeanFactoryPostProcessor();
        myBeanFactoryPostProcessor.postProcessBeanFactory(beanFactory);

        //Bean实例化之后，修改 Bean 属性信息
        MyBeanPostProcessor myBeanPostProcessor = new MyBeanPostProcessor();
        beanFactory.addBeanPostProcessor(myBeanPostProcessor);

        //获取bean并使用
        TestService testService = beanFactory.getBean("testService",TestService.class);

        String result = testService.queryInfo();
        //输出结果：测试结果：a,掌门教育,上海，
        //可以看出我们已经修改了配置信息，xml中配置的是杭州，大搜车
        System.out.println("测试结果："+result);

    }

    /***
     * 使用应用上下文
     * @param args
     * @throws Exception
     */
    public static void main1(String[] args) throws Exception{

        String xml = "classpath:springProcessor.xml";
        ClassXmlApplicationContext classXmlApplicationContext = new ClassXmlApplicationContext(xml);

        TestService testService = classXmlApplicationContext.getBean("testService",TestService.class);
        String result = testService.queryInfo();
        //输出结果：测试结果：a,掌门教育,上海，
        //可以看出结果一样，用上下文显然更方便
        System.out.println(result);
    }


}
